package net.hn.hnms.sys.system.cron;

import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import net.hn.hnms.sys.common.core.utils.DateUtils;
import net.hn.hnms.sys.common.core.utils.StringUtils;
import net.hn.hnms.sys.common.core.utils.tool.Func;
import net.hn.hnms.sys.system.api.domain.SysDept;
import net.hn.hnms.sys.system.service.ISysDeptService;
import net.hn.hnms.sys.system.service.ISysUserService;
import net.hn.hnms.sys.system.service.IhnService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;


/**
 * i 华能 部门更新数据 定时任务
 */
@Component
@Slf4j
@Async
//加上该注解不执行定时任务
//@ComponentScanIgnore
//@RefreshScope注解实现动态刷新原理
//@RefreshScope
public class IhnDeptUserCron {

    @Autowired
    private ISysUserService sysUserService;
    @Autowired
    private ISysDeptService sysDeptService;
    @Autowired
    IhnService ihnService;
//    @Autowired
//    IIhnInterfaceDataService iIhnInterfaceDataService;
    /**
     * 每10秒读取煤流数据，写入大屏报警表中
     */
//     @Scheduled(cron = "0/30 * * * * ?")//每30秒执行一次
//    @Scheduled(cron = "0 0/2 * * * ?")//每分钟执行一次
//    @Scheduled(cron = "0 10 12 * * ?")//每天12:10点执行
    @Scheduled(cron = "0 48 01 * * ?")//每天01:48分执行
//    @Async("rhdScheduleExecutor")
//   @OneTimeSchedule(lockName = "PushAndMessageCron.pushData", timeout = 600L)
//    @Async("ddtsScheduleExecutorConfig")
    public void pushData() {
        try {
            DateUtils.addDays(DateUtil.date(), -1);
            log.error("i华能数据同步开始");
            Date currentDate = new Date();
            //264 华能煤业
//            ihnDept_update("264", currentDate);
            ihnDept_update("6771", currentDate);//西川i华能是6771

            log.error("i华能数据同步结束");
        }catch (Exception e){
            e.printStackTrace();
            log.error("i华能数据失败");
        }

    }

    /**
     * i华能 部门数据更新
     * @param id 部门id。获取指定部门及其下的子部门。 如果不填，默认获取全量组织架构
//     * @param no_fetch_child 填“0”则为递归获取子部门下面的部门，填“1”则为不递归获取子部门下面的部门
//     * @param get_party_path 填1，则返回传入部门的路径信息
     * @param parse
     */
//    private void ihnDept_update(String id,String no_fetch_child,String get_party_path,Date parse) {
    private void ihnDept_update(String id,Date parse) {

        log.debug("部门数据更新同步开始时间："+ DateUtil.format(parse,"yyyy-MM-dd HH:mm:ss"));

        String data = ihnService.ihndeptList(id,"0","1");
        boolean b=false;
        if (StringUtils.isNotEmpty(data)){
            System.out.println(data);
            JSONObject jsonObject = JSONObject.parseObject(data);
            int errcode = jsonObject.getIntValue("code");
            if (errcode == 200){
                JSONArray department = jsonObject.getJSONArray("body");
                List<SysDept> ihnDeptInfos = new ArrayList<>(department.size());;
                for (int i = 0; i < department.size(); i++) {
                    JSONObject o =(JSONObject) department.get(i);
                    SysDept javaObject = o.toJavaObject(SysDept.class);
                    if (javaObject != null ) {
                        javaObject.setDeptId(Long.valueOf(o.getString("id")));
                        javaObject.setDeptName(o.getString("name"));
                        javaObject.setOrderNum(Integer.valueOf(o.getString("order")));
                        javaObject.setOrganizationCode("610204017042");
                    }
                    SysDept byId = sysDeptService.getById(javaObject.getDeptId());
                    if (Func.isNotEmpty(byId) ) {
                        //要更新那个需要配置
                    }else{
                        //只更新新增的部门
                        ihnDeptInfos.add(javaObject);
                    }

                }
                if (Func.isNotEmpty(ihnDeptInfos)){
                    b = sysDeptService.saveOrUpdateBatch(ihnDeptInfos);
                }

            }

//            return Response.success(b);
        }else{
//            return Response.success(b);
        }
        log.debug("部门数据更新同步结束时间："+DateUtil.format(parse,"yyyy-MM-dd HH:mm:ss"));



    }




}
